查看原文
其他

当我们设计一个专用处理器的时候我们在干什么?(风险)

2017-03-14 唐杉 StarryHeavensAbove

前几天正好看在到一个词“The Premortem”,直译过来是“事前验尸”的意思。实际当然没有这么血腥,是说在计划或执行一项任务的时候;在发生灾难性后果之前,先假定灾难已经发生,然后问自己“How?”。据说这样要比灾难发生以后再分析发生的原因要好得多。(参见Edge 2017 年度问题选读(1))。


我们今天也可以做这样一个假设,“我的公司倾尽全力花了两年时间做了一个专用处理器芯片,结果项目失败,公司倒闭。倒底发生了什么?”。当然,“公司着火,所有数据都没了”也是一个回答。 不过,我还是试着在技术层面找一些和专用处理器本身关系比较密切的答案吧。


1. 我们并不真的了解目标应用

在我们做一个面向特定应用的专用处理器的时候,也许没有想象中那么了解这个应用。我倾向于用这样问题来判断:“1.你是否已经有了全部目标应用或者算法的软件(程序)?2. 你是否有定量的约束条件?”。如果有,那么你就可以保证对你的设计进行客观和定量的评价(验证)。如果在对设计进行评估的时候,能够覆盖目标应用的软件程序还不到80%,或者具体的约束条件还不明确,那么就有很大风险。一种可能是,你为不确定性做出一些over design;另一种可能是你的优化目标和实际情况并不相符。不管是那一种情况,实际上都没有能够很好的发挥专用处理器的优势。


2. 不知道什么不应该做

如果我们不具备自己做专用处理器的能力,往往觉得它很神秘,会夸大设计的难度和风险。而当我们具备了这种能力,一个可能的倾向是夸大专用处理器的优势,什么地方都想用专用处理器来搞定。实际上,掌握了设计专用处理器的能力,相当于一个团队有了一件强有力的武器。至于是否使用和怎样使用则是一种更强的能力。一个好的SoC架构,往往是各种类型的处理器和硬件加速器配合工作的。能够得到这样的架构,或者是通过了多次迭代和优化,或者是以定量分析和仿真为基础(再次强调这一点)。


3. 忽视工具链的开发

设计一个专用处理器,要经历需求分析,架构设计,硬件实现和工具链开发等多项工作。一个比较常见的问题是忽视工具链的开发。但正如我在对方法工具的讨论(当我们设计一个专用处理器的时候我们在干什么?(设计方法&工具))中指出的,工具链(包括处理器开发工具和应用开发工具)对于专用处理器开发和使用是至关重要的。即使你的架构设计和硬件实现做的再好,如果没有一个完善的工具链,这些硬件就没法发挥最大的效能。从另一个角度来说,如果没有好的开发工具,架构设计和硬件实现也很难做好。个人认为,比较好的实践是在项目开始的时候就能够对工具链设计做出规划并配置专职的人员。


4. 败于细节

这算是老生常谈了。和任何一个研发项目一样,“可用”和“好用”的差别往往在于细节。如果我们要设计一个专用处理器,首先要把那些需要特殊关照(或者容易忽略)的“细节”列出来,并为这些细节安排足够的研发资源。举个例子,我们的一个项目里,在设计跳转指令“立即数”编码的时候考虑的不够细致,就导致最后程序的code size大了很多。这里很难统一说什么样的细节更重要,只能说尽早做出一个关键“细节”清单和对策很重要。


如果我们持续的把“Premortem”做下去,应该可以列出一个很长的清单。不过,剩下的还是留给大家自己去“练习”吧。

T.S.

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存